package com.app.miwawa.cui.system;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;

import org.framework.common.api.websocket.handler.WebsocketEndSynchs;
import org.framework.common.cui.AbstractController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.app.miwawa.api.system.entity.Easemob;
import com.app.miwawa.api.system.service.bo.EasemobBo;
import com.easemob.server.example.utils.EasemobUtils;

/**
 * 环信记录控制器
 * <p>描述: </p>
 * <p>Company: Professional</p>
 * @author chanlong(陈龙)
 * @date 2016年5月17日 下午3:24:45
 * @version 1.0.2016
 */
@RestController
public class EasemobController extends AbstractController {

	@Autowired
	private EasemobBo bo;
	
	@Autowired
	private WebsocketEndSynchs synchs;
	
	/**
	 * 注册环信账号.
	 * @param entity
	 * @return
	 * @throws Exception
	 * @author chanlong(陈龙)
	 * @date 2016年5月28日 下午9:12:29
	 */
	@RequestMapping("/system/easemob/register")
	public Object save(@ModelAttribute final Easemob entity) throws Exception {
		
		try{
			// 注册数据源
			registerDataSource(null);

			// 注册环信
			Object status = bo.register(entity.getType(), entity.getMobile());
			
			return success(status);
		} catch (Exception e) {
			return success("注册环信失败，系统异常！");
		}
		
	}
	
	/**
	 * 删除环信账号.
	 * @param entity
	 * @return
	 * @throws Exception
	 * @author chanlong(陈龙)
	 * @date 2016年5月28日 下午9:12:17
	 */
	@RequestMapping("/system/easemob/remove")
	public Object delete(@ModelAttribute final Easemob entity) throws Exception {
		
		try{
			// 注册数据源
			registerDataSource(null);

			return bo.delete(entity.getId()) ? success("注销环信成功！") : error("注销环信失败！");
		} catch (Exception e) {
			return error("注销环信失败，系统异常！");
		}
		
	}
	
	/**
	 * 同步环信账号.
	 * @param entity
	 * @return
	 * @throws Exception
	 * @author chanlong(陈龙)
	 * @date 2016年5月28日 下午9:12:01
	 */
	@RequestMapping("/system/easemob/sync")
	public Object sync() throws Exception {
		try{
			// 注册数据源
			registerDataSource(null);
			
			// 同步环信帐户
			bo.sync(synchs);
			
			return success("同步环信成功！");
		} catch (Exception e) {
			return error("同步环信失败，系统异常！");
		}
	}
	
	/**
	 * 刷新环信昵称.
	 * @param entity
	 * @return
	 * @throws Exception
	 * @author chanlong(陈龙)
	 * @date 2016年5月28日 下午9:12:01
	 */
	@RequestMapping("/system/easemob/nick")
	public Object nick() throws Exception {
		try{
			// 注册数据源
			registerDataSource(null);
			
			// 刷新环信帐户
			bo.nick();
			
			return success("同步环信成功！");
		} catch (Exception e) {
			return error("同步环信失败，系统异常！");
		}
	}
	
	/**
	 * 清理家长环信账号.
	 * @throws IOException
	 * @author chanlong(陈龙)
	 * @date 2016年8月26日 上午10:38:18
	 */
	@RequestMapping(value="/system/easemob/delete/parents")
	public void clearParentsEasemob() throws IOException{
		PrintWriter writer = response.getWriter();
		
		try {
			registerDataSource(null);
			
			List<Map<String, Object>> users = jdbc.queryForList("select a.* from tb_system_easemob a left join tb_app_user b on a.uid = b.id where a.type = '家长' and b.id is null");
			
			for (Map<String, Object> user : users) {
				String eid = String.valueOf(user.get("eid"));
				if(EasemobUtils.getIMUser(eid) && EasemobUtils.deleteIMUser(eid)){
					jdbc.update("delete from tb_system_easemob where eid = ?",eid);
					writer.println("环信账号：["+eid+"]");
				}
			}
			
			writer.println("清理环信账号成功！");
		} catch (Exception e) {
			writer.println("清理环信账号失败！");
		} finally {
			writer.close();
		}
	}
}
